On Wed, Jun 10, 2026 at 09:41:56AM -0700, Richard Henderson wrote:
> On 6/3/26 11:26, Jim MacArthur wrote:
> > + const uint64_t BW_STRIDE_SHIFT = 40;
> ...
> > + switch (bw_stride_field) {
> > + case 0b00000:
> > + case 0b00010:
> > + case 0b00100:
> > + case 0b00110:
> > + case 0b00111:
> > + case 0b01000:
> > + case 0b01001:
> > + case 0b01010:
> > + case 0b10000:
> > + bw_stride = 1ULL << (bw_stride_field + BW_STRIDE_SHIFT);
>
> BW_STRIDE_SHIFT should be 39 not 40.
>
> Everything else is correct.
>
Agree with the simplification, but BW_STRIDE_SHIFT should be 40. As per
D24.2.54, a BWSTRIDE field of 0 gives a stride size of 1TB or 1<<40 bytes.
(gpcbwu, the highest bit set in the mask, is indeed 39+BWSTRIDE, but the
subtraction of bw_size from bw_stride has the same effect.)
There was an error in a later use of bw_stride which might have made it look
like something else was intended.
I'll respin with the simplification suggested; thank you.
Jim