On Wed, May 20, 2026 at 4:36 PM Jay Chang <[email protected]> wrote: > > Replace manual bit manipulation for better readability: > > - TOR: Use ROUND_DOWN() to clear lower bits > - NAPOT: Use deposit64() to set lower bits > > Signed-off-by: Jay Chang <[email protected]>
Acked-by: Alistair Francis <[email protected]> Alistair > --- > target/riscv/pmp.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/target/riscv/pmp.c b/target/riscv/pmp.c > index 8adf7c9719..58a8923d0d 100644 > --- a/target/riscv/pmp.c > +++ b/target/riscv/pmp.c > @@ -247,8 +247,9 @@ void pmp_update_rule_addr(CPURISCVState *env, uint32_t > pmp_index) > case PMP_AMATCH_TOR: > /* Bits pmpaddr[G-1:0] do not affect the TOR address-matching logic. > */ > if (g >= 1) { > - prev_addr &= ~((1ULL << g) - 1ULL); > - this_addr &= ~((1ULL << g) - 1ULL); > + uint64_t granule = 1ULL << g; > + prev_addr = ROUND_DOWN(prev_addr, granule); > + this_addr = ROUND_DOWN(this_addr, granule); > } > if (prev_addr >= this_addr) { > sa = ea = 0u; > @@ -641,13 +642,14 @@ target_ulong pmpaddr_csr_read(CPURISCVState *env, > uint32_t addr_index) > case PMP_AMATCH_TOR: > /* Bit [g-1:0] read all zero */ > if (g >= 1 && g < TARGET_LONG_BITS) { > - val &= ~((1ULL << g) - 1ULL); > + uint64_t granule = 1ULL << g; > + val = ROUND_DOWN(val, granule); > } > break; > case PMP_AMATCH_NAPOT: > /* Bit [g-2:0] read all one */ > if (g >= 2 && g < TARGET_LONG_BITS) { > - val |= ((1ULL << (g - 1)) - 1ULL); > + val = deposit64(val, 0, g - 1, -1ULL); > } > break; > default: > -- > 2.48.1 > >
