mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-26 23:36:32 +00:00
fix: optimize for bare-metal HashFunSegFind, DCBlotColor8, GrCalcScreenUpdates, GrUpdateScreen32; inc patch num
This commit is contained in:
parent
cd46dc4ab3
commit
4eaf4f7205
3 changed files with 43 additions and 24 deletions
|
@ -12,19 +12,24 @@ U0 HashFunSegFind(CHashTable *h, U8 *addr, Bool *_has_lower, U64 *_best, CHash *
|
||||||
{
|
{
|
||||||
Bool *has_lower = *_has_lower;
|
Bool *has_lower = *_has_lower;
|
||||||
CHashExport *tmpex;
|
CHashExport *tmpex;
|
||||||
U64 i, j, best = *_best;
|
U64 i, j, best = *_best, reg mask = h->mask;
|
||||||
CHash *res = *_res;
|
CHash *res = *_res, **body = h->body;;
|
||||||
|
CHashFun *temp_hashfun;
|
||||||
|
U16 hf_flags;
|
||||||
|
|
||||||
for (i = 0; i <= h->mask; i++)
|
for (i = 0; i <= mask; i++)
|
||||||
{
|
{
|
||||||
tmpex = h->body[i];
|
tmpex = body[i];
|
||||||
|
|
||||||
while (tmpex)
|
while (tmpex)
|
||||||
{
|
{
|
||||||
j = 0;
|
j = 0;
|
||||||
if (tmpex->type & HTT_FUN)
|
if (tmpex->type & HTT_FUN)
|
||||||
{
|
{
|
||||||
if (!Bt(&tmpex(CHashFun *)->flags, Cf_EXTERN) && !Bt(&tmpex(CHashFun *)->flags, Ff_INTERNAL))
|
temp_hashfun = tmpex; // cast
|
||||||
j = tmpex(CHashFun *)->exe_addr;
|
hf_flags = temp_hashfun->flags;
|
||||||
|
if (!Bt(&hf_flags, Cf_EXTERN) && !Bt(&hf_flags, Ff_INTERNAL))
|
||||||
|
j = temp_hashfun->exe_addr;
|
||||||
}
|
}
|
||||||
else if (tmpex->type & HTT_EXPORT_SYS_SYM)
|
else if (tmpex->type & HTT_EXPORT_SYS_SYM)
|
||||||
j = tmpex->val;
|
j = tmpex->val;
|
||||||
|
|
|
@ -14,7 +14,7 @@ U8 *rev_bits_table; //Table with U8 bits reversed
|
||||||
CDate local_time_offset;
|
CDate local_time_offset;
|
||||||
F64 *pow10_I64,
|
F64 *pow10_I64,
|
||||||
sys_os_version = 2.03;
|
sys_os_version = 2.03;
|
||||||
U64 sys_os_version_sub = 117;
|
U64 sys_os_version_sub = 118;
|
||||||
U8 *sys_os_version_str;
|
U8 *sys_os_version_str;
|
||||||
U8 *sys_os_version_full;
|
U8 *sys_os_version_full;
|
||||||
U8 *sys_os_version_nice;
|
U8 *sys_os_version_nice;
|
||||||
|
|
|
@ -345,22 +345,29 @@ U0 GrUpdateTextFG()
|
||||||
U0 DCBlotColor8(CDC *dc, CDC *img)
|
U0 DCBlotColor8(CDC *dc, CDC *img)
|
||||||
{
|
{
|
||||||
U8 *src = img->body, *b0 = dc->body;
|
U8 *src = img->body, *b0 = dc->body;
|
||||||
I64 j, k, d0 = img->width_internal * img->height;
|
I64 reg j, reg jj, v = 0, k, d0 = img->width_internal * img->height;
|
||||||
|
|
||||||
for (k = 0; k < d0; k++)
|
for (k = 0; k < d0; k += 8)
|
||||||
{
|
{
|
||||||
j = *src++;
|
j = *(src(U64 *));
|
||||||
if (j != TRANSPARENT)
|
src += 8;
|
||||||
*b0++ = j;
|
do
|
||||||
else
|
{
|
||||||
|
jj = j & 0xFF;
|
||||||
|
|
||||||
|
if (jj != TRANSPARENT)
|
||||||
|
*b0 = jj;
|
||||||
|
|
||||||
b0++;
|
b0++;
|
||||||
|
j >>= 8;
|
||||||
|
} while (v++ < 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
U0 GrCalcScreenUpdates()
|
U0 GrCalcScreenUpdates()
|
||||||
{
|
{
|
||||||
U16 *screen, *last_screen = gr.screen_cache;
|
U64 *screen, *last_screen = gr.screen_cache;
|
||||||
U64 i, *src = text.raw_screen, *dst = text.fb_alias, diffs_size = GR_WIDTH * GR_HEIGHT / 2;
|
U64 i, *src = text.raw_screen, *dst = text.fb_alias, diffs_size = GR_WIDTH * GR_HEIGHT / 8;
|
||||||
|
|
||||||
if (gr.screen_zoom == 1)
|
if (gr.screen_zoom == 1)
|
||||||
screen = gr.dc2->body;
|
screen = gr.dc2->body;
|
||||||
|
@ -368,17 +375,16 @@ U0 GrCalcScreenUpdates()
|
||||||
screen = gr.zoomed_dc->body;
|
screen = gr.zoomed_dc->body;
|
||||||
|
|
||||||
for (i = 0; i < diffs_size; i++)
|
for (i = 0; i < diffs_size; i++)
|
||||||
{
|
|
||||||
if (screen[i] != last_screen[i])
|
if (screen[i] != last_screen[i])
|
||||||
dst[i] = src[i];
|
MemCopy(dst + i * 4, src + i * 4, 4 * 64);
|
||||||
}
|
|
||||||
MemCopy(gr.screen_cache, screen, diffs_size * 2);
|
MemCopy(gr.screen_cache, screen, diffs_size * 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
U0 GrUpdateScreen32()
|
U0 GrUpdateScreen32()
|
||||||
{
|
{
|
||||||
U64 size, *dst;
|
U64 size, *dst, reg src64val;
|
||||||
U8 *src;
|
U8 *src, reg a, reg b, c, reg d;
|
||||||
|
|
||||||
if (gr.screen_zoom == 1)
|
if (gr.screen_zoom == 1)
|
||||||
{
|
{
|
||||||
|
@ -392,9 +398,17 @@ U0 GrUpdateScreen32()
|
||||||
size = src + gr.zoomed_dc->height * gr.zoomed_dc->width_internal;
|
size = src + gr.zoomed_dc->height * gr.zoomed_dc->width_internal;
|
||||||
}
|
}
|
||||||
dst = text.raw_screen;
|
dst = text.raw_screen;
|
||||||
while (src < size) //draw 2 pixels at a time
|
while (src < size) // draw 4 pixels at a time
|
||||||
*dst++ = gr_palette[*src++ & 0xFF] | gr_palette[*src++ & 0xFF] << 32;
|
{
|
||||||
|
src64val = *(src(U64 *));
|
||||||
|
a = src64val & 0xFF;
|
||||||
|
b = (src64val >>= 8) & 0xFF;
|
||||||
|
c = (src64val >>= 8) & 0xFF;
|
||||||
|
d = (src64val >>= 8) & 0xFF;
|
||||||
|
src += 4;
|
||||||
|
*dst++ = gr_palette[a] | gr_palette[b] << 32;
|
||||||
|
*dst++ = gr_palette[c] | gr_palette[d] << 32;
|
||||||
|
}
|
||||||
|
|
||||||
GrCalcScreenUpdates;
|
GrCalcScreenUpdates;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue