From d364d445ad7b491ebd8bcf991799fb38437541a0 Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Sun, 12 Jun 2022 13:34:30 +0200 Subject: [PATCH] isaspec: Handle patterns bigger then 64 bit Currently uint64_t_to_bitmask(..) is used in combination with the pattern 'match'. This only works for values smaller then 64 bit. Add support for bigger isa sizes. Signed-off-by: Christian Gmeiner Reviewed-by: Rob Clark Part-of: --- src/compiler/isaspec/encode.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/compiler/isaspec/encode.py b/src/compiler/isaspec/encode.py index f24cfba5deb..8daa1ff9f5e 100755 --- a/src/compiler/isaspec/encode.py +++ b/src/compiler/isaspec/encode.py @@ -528,7 +528,19 @@ encode${root.get_c_name()}(struct encode_state *s, struct bitset_params *p, ${ro if (s->gen >= ${leaf.gen_min} && s->gen <= ${leaf.gen_max}) { % endif <% snippet = encode_bitset.render(s=s, root=root, leaf=leaf) %> - bitmask_t val = uint64_t_to_bitmask(${hex(leaf.get_pattern().match)}); +<% words = isa.split_bits((leaf.get_pattern().match), 64) %> + bitmask_t val = uint64_t_to_bitmask(${words[-1]}); + +<% words.pop() %> + +% for x in reversed(range(len(words))): + { + bitmask_t word = uint64_t_to_bitmask(${words[x]}); + BITSET_SHL(val.bitset, 64); + BITSET_OR(val.bitset, val.bitset, word.bitset); + } +% endfor + BITSET_OR(val.bitset, val.bitset, ${root.snippets[snippet]}(s, p, src).bitset); return val; % if leaf.has_gen_restriction():