lib: Use __builtin_ctzl() in pmp_get()

We should should __builtin_ctzl() in pmp_get() instead of
custom ctz() function.

Signed-off-by: Li Jinpei <leekingp1994@163.com>
Signed-off-by: Anup Patel <anup.patel@wdc.com>
Reviewed-by: Atish Patra <atish.patra@wdc.com>
This commit is contained in:
Li Jinpei
2020-02-11 15:37:24 +05:30
committed by Anup Patel
parent 179eddeb9c
commit 897b8fbdd9

View File

@@ -184,18 +184,6 @@ void csr_write_num(int csr_num, unsigned long val)
}; };
} }
static unsigned long ctz(unsigned long x)
{
unsigned long ret = 0;
while (!(x & 1UL)) {
ret++;
x = x >> 1;
}
return ret;
}
int pmp_set(unsigned int n, unsigned long prot, unsigned long addr, int pmp_set(unsigned int n, unsigned long prot, unsigned long addr,
unsigned long log2len) unsigned long log2len)
{ {
@@ -287,7 +275,7 @@ int pmp_get(unsigned int n, unsigned long *prot_out, unsigned long *addr_out,
addr = 0; addr = 0;
log2len = __riscv_xlen; log2len = __riscv_xlen;
} else { } else {
t1 = ctz(~addr); t1 = __builtin_ctzl(~addr);
addr = (addr & ~((1UL << t1) - 1)) << PMP_SHIFT; addr = (addr & ~((1UL << t1) - 1)) << PMP_SHIFT;
log2len = (t1 + PMP_SHIFT + 1); log2len = (t1 + PMP_SHIFT + 1);
} }