- range = (None,None)
- if range_str.find(':') != -1:
- r = range_str.split(":")
- range = (int(r[0]),int(r[1]))
- else:
- range = (int(range_str),int(range_str))
+ bits = []
+ for s in range_str.split(','):
+ if ':' in s:
+ (start, end) = map( \
+ lambda s: reg.bit_number(int(s)),
+ s.split(':'))
+ start = reg.bit_number(int(start))
+ end = reg.bit_number(int(end))
+ bits.extend(range(start, end + 1, 1))
+ elif '<<' in s:
+ (mask, shift) = map(lambda s: int(s.strip()),
+ s.split('<<'))
+ bits.extend(bitfield.mask_and_shift_to_bits( \
+ reg.width, mask, shift))
+ else:
+ bits.append(reg.bit_number(int(s)))
+
+ return bitfield(bits, name)
+