Lines Matching full:bitset
32 # from the decode case. (Or put another way, the decoded bitset
35 # In the xml, we can have multiple override cases per bitset,
59 # } else { // maps to the default case in bitset, ie. outside <override/>
65 # in a bitset may be conditional
67 def __init__(self, bitset, field, case): argument
71 self.expr = bitset.isa.expressions[case.expr]
79 def __init__(self, bitset, field, case): argument
83 self.expr = bitset.isa.expressions[case.expr]
90 def __init__(self, bitset, case, name): argument
91 self.bitset = bitset # leaf bitset
95 def fields(self, bitset=None): argument
96 if bitset is None:
97 bitset = self.bitset
101 for case in bitset.cases:
103 expr = bitset.isa.expressions[case.expr]
107 # For bitset fields, the bitset type could reference
108 # fields in this (the containing) bitset, in addition
117 expr = bitset.isa.expressions[field.expr]
120 yield FieldCase(bitset, field, case)
125 if bitset.extends is not None:
126 yield from self.fields(bitset.isa.bitsets[bitset.extends])
128 # Represents an if/else case in bitset encoding which has a display
131 def __init__(self, bitset, case): argument
132 self.bitset = bitset # leaf bitset
136 self.expr = bitset.isa.expressions[case.expr]
138 self.append_forced(bitset)
145 def append_forced(self, bitset): argument
146 if bitset.encode is not None:
147 for name, val in bitset.encode.forced.items():
149 if bitset.extends is not None:
150 self.append_forced(bitset.isa.bitsets[bitset.extends])
156 # b) a bitset field, which may be "parameterized".. for example a
169 yield DisplayField(self.bitset, self, fieldname)
171 def assert_cases(self, bitset=None): argument
172 if bitset is None:
173 bitset = self.bitset
174 for case in bitset.cases:
177 yield AssertField(bitset, field, case)
178 if bitset.extends is not None:
179 yield from self.assert_cases(bitset.isa.bitsets[bitset.extends])
187 def bitset_cases(self, bitset, leaf_bitset=None): argument
189 leaf_bitset = bitset
190 for case in bitset.cases:
194 if case.expr is None and bitset.extends is not None:
195 parent_bitset = bitset.isa.bitsets[bitset.extends]
200 # Find unique bitset remap/parameter names, to generate a struct
201 # used to pass "parameters" to bitset fields:
216 def case_name(self, bitset, name): argument
217 …return bitset.encode.case_prefix + name.upper().replace('.', '_').replace('-', '_').replace('#', '…
238 # expressions used in a bitset (case or field or recursively parent bitsets)
239 def bitset_used_exprs(self, bitset): argument
240 for case in bitset.cases:
246 if bitset.extends is not None:
247 yield from self.bitset_used_exprs(self.isa.bitsets[bitset.extends])
249 def extractor_impl(self, bitset, name): argument
250 if bitset.encode is not None:
251 if name in bitset.encode.maps:
252 return bitset.encode.maps[name]
253 if bitset.extends is not None:
254 return self.extractor_impl(self.isa.bitsets[bitset.extends], name)
260 def extractor_fallback(self, bitset, name): argument
261 extr_name = bitset.name + '.' + name
263 print('WARNING: no encode mapping for {}.{}'.format(bitset.name, name))
267 def extractor(self, bitset, name): argument
268 extr = self.extractor_impl(bitset, name)
271 return self.extractor_fallback(bitset, name)
273 # In the special case of needing to access a field with bitset type
277 def expr_extractor(self, bitset, name, p): argument
278 extr = self.extractor_impl(bitset, name)
279 field = self.resolve_simple_field(bitset, name)
282 return self.expr_name(bitset.get_root(), expr) + '(s, p, src)'
287 extr = self.extractor_fallback(bitset, name)
298 def resolve_simple_field(self, bitset, name): argument
300 for case in bitset.cases:
305 if bitset.extends is not None:
306 return self.resolve_simple_field(bitset.isa.bitsets[bitset.extends], name)
309 def encode_type(self, bitset): argument
310 if bitset.encode is not None:
311 if bitset.encode.type is not None:
312 return bitset.encode.type
313 if bitset.extends is not None:
314 return self.encode_type(bitset.isa.bitsets[bitset.extends])
346 #include <util/bitset.h>
356 BITSET_WORD bitset[BITMASK_WORDS];
363 return mask.bitset[0];
365 return ((uint64_t)mask.bitset[1] << 32) | mask.bitset[0];
373 .bitset[0] = val & 0xffffffff,
375 .bitset[1] = (val >> 32) & 0xffffffff,
386 *(dst + ${i}) = instr.bitset[${i}];
419 BITSET_ZERO(field.bitset);
424 BITSET_ZERO(mask.bitset);
425 BITSET_SET_RANGE(mask.bitset, 0, high - low);
428 BITSET_AND(field.bitset, field.bitset, mask.bitset);
429 BITSET_SHL(field.bitset, low);
556 BITSET_SHL(val.bitset, 64);
557 BITSET_OR(val.bitset, val.bitset, word.bitset);
561 BITSET_OR(val.bitset, val.bitset, ${root.snippets[snippet]}(s, p, src).bitset);
582 % else: # single case bitset, no switch
586 BITSET_OR(val.bitset, val.bitset, ${root.snippets[snippet]}(s, p, src).bitset);
671 BITSET_OR(val.bitset, val.bitset, packed.bitset);
691 BITSET_OR(val.bitset, val.bitset, packed.bitset);