mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
![]() The earlier implementation fell into a corner case for bytes that were
0x01, giving a wrong result (but not affecting our application test
cases for strings, as an ASCII value 0x01 is rare in those...).
This changes the algorithm to:
1. Mask out the high-bit of each bytes (so that each byte is <= 127).
2. Add 127 to each byte (i.e. if the low 7 bits are not 0, this will overflow
into the highest bit of each byte).
3. Bitwise-or the original value back in (to cover those cases where the
source byte was exactly 128) to saturate the high-bit.
4. Shift-and-mask (implemented as a mask-and-shift) to extract the MSB of
each byte into its LSB.
5. Multiply with 0xff to fan out the LSB to all bits of each byte.
Fixes:
|
||
---|---|---|
.. | ||
trans_privileged.c.inc | ||
trans_rva.c.inc | ||
trans_rvb.c.inc | ||
trans_rvd.c.inc | ||
trans_rvf.c.inc | ||
trans_rvh.c.inc | ||
trans_rvi.c.inc | ||
trans_rvm.c.inc | ||
trans_rvv.c.inc |