mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
sh2 drc, fix arm32 ld/st offset (minimum -255)
This commit is contained in:
parent
ca8b001b7f
commit
8d8357dded
1 changed files with 8 additions and 0 deletions
|
@ -2611,6 +2611,14 @@ static uptr split_address(uptr la, uptr mask, s32 *offs)
|
||||||
uptr sign = (mask>>1) + 1; // sign bit in offset
|
uptr sign = (mask>>1) + 1; // sign bit in offset
|
||||||
*offs = (la & mask) | (la & sign ? ~mask : 0); // offset part, sign extended
|
*offs = (la & mask) | (la & sign ? ~mask : 0); // offset part, sign extended
|
||||||
la = (la & ~mask) + ((la & sign) << 1); // base part, corrected for offs sign
|
la = (la & ~mask) + ((la & sign) << 1); // base part, corrected for offs sign
|
||||||
|
#ifdef __arm__
|
||||||
|
// arm32 offset has an add/sub flag and an unsigned 8 bit value, which only
|
||||||
|
// allows values of [-255...255]. the value -256 thus can't be used.
|
||||||
|
if (*offs + sign == 0) {
|
||||||
|
la += sign;
|
||||||
|
*offs += sign;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return la;
|
return la;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue