mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
core, fix rendering copy buffer overlap reported from asan
This commit is contained in:
parent
2dacba5235
commit
d2e3f475ff
2 changed files with 40 additions and 3 deletions
|
@ -132,6 +132,10 @@ void blockcpy_or(void *dst, void *src, size_t n, int pat);
|
|||
void blockcpy_or(void *dst, void *src, size_t n, int pat)
|
||||
{
|
||||
unsigned char *pd = dst, *ps = src;
|
||||
if (dst > src) {
|
||||
for (pd += n, ps += n; n; n--)
|
||||
*--pd = (unsigned char) (*--ps | pat);
|
||||
} else
|
||||
for (; n; n--)
|
||||
*pd++ = (unsigned char) (*ps++ | pat);
|
||||
}
|
||||
|
@ -2019,7 +2023,6 @@ void PicoDrawSetOutFormat(pdso_t which, int use_32x_line_mode)
|
|||
{
|
||||
case PDF_8BIT:
|
||||
FinalizeLine = FinalizeLine8bit;
|
||||
PicoDrawSetInternalBuf(Pico.est.Draw2FB, 328);
|
||||
break;
|
||||
|
||||
case PDF_RGB555:
|
||||
|
|
|
@ -2205,6 +2205,9 @@ FinalizeLine555:
|
|||
|
||||
blockcpy:
|
||||
stmfd sp!, {r4,r5}
|
||||
cmp r0, r1
|
||||
bhs blockcpyhi
|
||||
|
||||
mov r2, r2, lsr #4
|
||||
blockcpy_loop:
|
||||
ldmia r1!, {r3-r5,r12}
|
||||
|
@ -2214,6 +2217,18 @@ blockcpy_loop:
|
|||
ldmfd sp!, {r4,r5}
|
||||
bx lr
|
||||
|
||||
blockcpyhi:
|
||||
add r0, r0, r2
|
||||
add r1, r1, r2
|
||||
mov r2, r2, lsr #4
|
||||
blockcpyhi_loop:
|
||||
ldmdb r1!, {r3-r5,r12}
|
||||
subs r2, r2, #1
|
||||
stmdb r0!, {r3-r5,r12}
|
||||
bne blockcpyhi_loop
|
||||
ldmfd sp!, {r4,r5}
|
||||
bx lr
|
||||
|
||||
|
||||
.global blockcpy_or @ void *dst, void *src, size_t n, int pat
|
||||
|
||||
|
@ -2221,6 +2236,9 @@ blockcpy_or:
|
|||
stmfd sp!, {r4-r6}
|
||||
orr r3, r3, r3, lsl #8
|
||||
orr r3, r3, r3, lsl #16
|
||||
cmp r0, r1
|
||||
bhs blockcpyhi_or
|
||||
|
||||
mov r2, r2, lsr #4
|
||||
blockcpy_loop_or:
|
||||
ldmia r1!, {r4-r6,r12}
|
||||
|
@ -2234,4 +2252,20 @@ blockcpy_loop_or:
|
|||
ldmfd sp!, {r4-r6}
|
||||
bx lr
|
||||
|
||||
blockcpyhi_or:
|
||||
add r0, r0, r2
|
||||
add r1, r1, r2
|
||||
mov r2, r2, lsr #4
|
||||
blockcpyhi_loop_or:
|
||||
ldmdb r1!, {r4-r6,r12}
|
||||
subs r2, r2, #1
|
||||
orr r4, r4, r3
|
||||
orr r5, r5, r3
|
||||
orr r6, r6, r3
|
||||
orr r12,r12,r3
|
||||
stmdb r0!, {r4-r6,r12}
|
||||
bne blockcpyhi_loop_or
|
||||
ldmfd sp!, {r4-r6}
|
||||
bx lr
|
||||
|
||||
@ vim:filetype=armasm
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue