mirror of https://github.com/xqemu/xqemu.git
vga: optimize ppm_save() divisions
ppm_save() spends upwards of 50% of its time doing divisions. Replace them with shifts. Reviewed-by: Alon Levy <alevy@redhat.com> Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
19bf7c8708
commit
a0f426109e
10
hw/vga.c
10
hw/vga.c
|
@ -2373,12 +2373,10 @@ int ppm_save(const char *filename, struct DisplaySurface *ds)
|
||||||
v = *(uint32_t *)d;
|
v = *(uint32_t *)d;
|
||||||
else
|
else
|
||||||
v = (uint32_t) (*(uint16_t *)d);
|
v = (uint32_t) (*(uint16_t *)d);
|
||||||
r = ((v >> ds->pf.rshift) & ds->pf.rmax) * 256 /
|
/* Limited to 8 or fewer bits per channel: */
|
||||||
(ds->pf.rmax + 1);
|
r = ((v >> ds->pf.rshift) & ds->pf.rmax) << (8 - ds->pf.rbits);
|
||||||
g = ((v >> ds->pf.gshift) & ds->pf.gmax) * 256 /
|
g = ((v >> ds->pf.gshift) & ds->pf.gmax) << (8 - ds->pf.gbits);
|
||||||
(ds->pf.gmax + 1);
|
b = ((v >> ds->pf.bshift) & ds->pf.bmax) << (8 - ds->pf.bbits);
|
||||||
b = ((v >> ds->pf.bshift) & ds->pf.bmax) * 256 /
|
|
||||||
(ds->pf.bmax + 1);
|
|
||||||
*pbuf++ = r;
|
*pbuf++ = r;
|
||||||
*pbuf++ = g;
|
*pbuf++ = g;
|
||||||
*pbuf++ = b;
|
*pbuf++ = b;
|
||||||
|
|
Loading…
Reference in New Issue