target/riscv: Improve PMP address alignment readability
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 <jay.chang@sifive.com> Reviewed-by: Chao Liu <chao.liu.zevorn@gmail.com> Message-ID: <20260520063606.36600-3-jay.chang@sifive.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Jay Chang committed
May 20, 2026 at 14:36 UTC
ac02839c2ff42a1d2a5096156087ce05a9f38386
1 file changed
+6
-4
target/riscv/pmp.c
+6
-4
@@ -247,8 +247,9 @@ void pmp_update_rule_addr(CPURISCVState *env, uint32_t pmp_index)
247
case PMP_AMATCH_TOR:
248
/* Bits pmpaddr[G-1:0] do not affect the TOR address-matching logic. */
249
if (g >= 1) {
250
- prev_addr &= ~((1ULL << g) - 1ULL);
251
- this_addr &= ~((1ULL << g) - 1ULL);
250
+ uint64_t granule = 1ULL << g;
251
+ prev_addr = ROUND_DOWN(prev_addr, granule);
252
+ this_addr = ROUND_DOWN(this_addr, granule);
253
}
254
if (prev_addr >= this_addr) {
255
sa = ea = 0u;
@@ -641,13 +642,14 @@ target_ulong pmpaddr_csr_read(CPURISCVState *env, uint32_t addr_index)
642
case PMP_AMATCH_TOR:
643
/* Bit [g-1:0] read all zero */
644
if (g >= 1 && g < TARGET_LONG_BITS) {
644
- val &= ~((1ULL << g) - 1ULL);
645
+ uint64_t granule = 1ULL << g;
646
+ val = ROUND_DOWN(val, granule);
647
}
648
break;
649
case PMP_AMATCH_NAPOT:
650
/* Bit [g-2:0] read all one */
651
if (g >= 2 && g < TARGET_LONG_BITS) {
650
- val |= ((1ULL << (g - 1)) - 1ULL);
652
+ val = deposit64(val, 0, g - 1, -1ULL);
653
}
654
break;
655
default: