qxl: refactor rounding up to a nearest power of 2
We already have pow2floor, mirror it and use instead of a function with similar results (same in used domain), to clarify our intent. Signed-off-by: Radim Krčmář <rkrcmar@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
876d516311
commit
bb7443f6d6
@ -300,19 +300,6 @@ void qxl_spice_reset_cursor(PCIQXLDevice *qxl)
|
||||
qxl->ssd.cursor = cursor_builtin_hidden();
|
||||
}
|
||||
|
||||
|
||||
static inline uint32_t msb_mask(uint32_t val)
|
||||
{
|
||||
uint32_t mask;
|
||||
|
||||
do {
|
||||
mask = ~(val - 1) & val;
|
||||
val &= ~mask;
|
||||
} while (mask < val);
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
static ram_addr_t qxl_rom_size(void)
|
||||
{
|
||||
uint32_t required_rom_size = sizeof(QXLRom) + sizeof(QXLModes) +
|
||||
@ -1921,10 +1908,10 @@ static void qxl_init_ramsize(PCIQXLDevice *qxl)
|
||||
qxl->vram32_size = 4096;
|
||||
qxl->vram_size = 4096;
|
||||
}
|
||||
qxl->vgamem_size = msb_mask(qxl->vgamem_size * 2 - 1);
|
||||
qxl->vga.vram_size = msb_mask(qxl->vga.vram_size * 2 - 1);
|
||||
qxl->vram32_size = msb_mask(qxl->vram32_size * 2 - 1);
|
||||
qxl->vram_size = msb_mask(qxl->vram_size * 2 - 1);
|
||||
qxl->vgamem_size = pow2ceil(qxl->vgamem_size);
|
||||
qxl->vga.vram_size = pow2ceil(qxl->vga.vram_size);
|
||||
qxl->vram32_size = pow2ceil(qxl->vram32_size);
|
||||
qxl->vram_size = pow2ceil(qxl->vram_size);
|
||||
}
|
||||
|
||||
static int qxl_init_common(PCIQXLDevice *qxl)
|
||||
@ -1956,7 +1943,7 @@ static int qxl_init_common(PCIQXLDevice *qxl)
|
||||
break;
|
||||
case 4: /* qxl-4 */
|
||||
pci_device_rev = QXL_REVISION_STABLE_V12;
|
||||
io_size = msb_mask(QXL_IO_RANGE_SIZE * 2 - 1);
|
||||
io_size = pow2ceil(QXL_IO_RANGE_SIZE);
|
||||
break;
|
||||
default:
|
||||
error_report("Invalid revision %d for qxl device (max %d)",
|
||||
|
@ -418,6 +418,9 @@ static inline bool is_power_of_2(uint64_t value)
|
||||
/* round down to the nearest power of 2*/
|
||||
int64_t pow2floor(int64_t value);
|
||||
|
||||
/* round up to the nearest power of 2 (0 if overflow) */
|
||||
uint64_t pow2ceil(uint64_t value);
|
||||
|
||||
#include "qemu/module.h"
|
||||
|
||||
/*
|
||||
|
@ -483,6 +483,20 @@ int64_t pow2floor(int64_t value)
|
||||
return value;
|
||||
}
|
||||
|
||||
/* round up to the nearest power of 2 (0 if overflow) */
|
||||
uint64_t pow2ceil(uint64_t value)
|
||||
{
|
||||
uint8_t nlz = clz64(value);
|
||||
|
||||
if (is_power_of_2(value)) {
|
||||
return value;
|
||||
}
|
||||
if (!nlz) {
|
||||
return 0;
|
||||
}
|
||||
return 1ULL << (64 - nlz);
|
||||
}
|
||||
|
||||
/*
|
||||
* Implementation of ULEB128 (http://en.wikipedia.org/wiki/LEB128)
|
||||
* Input is limited to 14-bit numbers
|
||||
|
Loading…
Reference in New Issue
Block a user