sh2 drc, fix arm32 ld/st offset (minimum -255)

This commit is contained in:
kub 2021-06-28 21:31:32 +02:00
parent ca8b001b7f
commit 8d8357dded

View file

@ -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;
} }