2c2
< * Copyright (c) 2012, 2014, 2017 ARM Limited
---
> * Copyright (c) 2012, 2014, 2017-2018 ARM Limited
47a48
> #include <algorithm>
198c199,209
< return ULL(1) << (intlvHighBit - intlvBits + 1);
---
> if (interleaved()) {
> const uint8_t intlv_low_bit = intlvHighBit - intlvBits + 1;
> if (hashed()) {
> const uint8_t xor_low_bit = xorHighBit - intlvBits + 1;
> return ULL(1) << std::min(intlv_low_bit, xor_low_bit);
> } else {
> return ULL(1) << intlv_low_bit;
> }
> } else {
> return size();
> }
319c330,340
< return _start >= r._start && _end <= r._end;
---
>
> // This address range is not interleaved and therefore it
> // suffices to check the upper bound, the lower bound and
> // whether it would fit in a continuous segment of the input
> // addr range.
> if (r.interleaved()) {
> return r.contains(_start) && r.contains(_end) &&
> size() <= r.granularity();
> } else {
> return _start >= r._start && _end <= r._end;
> }