sh: add byte support to the sign extension code
This patch adds byte support to the sign extension code. Unaligned access traps should never be generated on 8-bit io operations, but we will use this code for trapped io and we do need byte support there. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
1e6760c5c4
commit
4252c659a4
|
@ -150,14 +150,24 @@ static int die_if_no_fixup(const char * str, struct pt_regs * regs, long err)
|
||||||
static inline void sign_extend(unsigned int count, unsigned char *dst)
|
static inline void sign_extend(unsigned int count, unsigned char *dst)
|
||||||
{
|
{
|
||||||
#ifdef __LITTLE_ENDIAN__
|
#ifdef __LITTLE_ENDIAN__
|
||||||
|
if ((count == 1) && dst[0] & 0x80) {
|
||||||
|
dst[1] = 0xff;
|
||||||
|
dst[2] = 0xff;
|
||||||
|
dst[3] = 0xff;
|
||||||
|
}
|
||||||
if ((count == 2) && dst[1] & 0x80) {
|
if ((count == 2) && dst[1] & 0x80) {
|
||||||
dst[2] = 0xff;
|
dst[2] = 0xff;
|
||||||
dst[3] = 0xff;
|
dst[3] = 0xff;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if ((count == 2) && dst[2] & 0x80) {
|
if ((count == 1) && dst[3] & 0x80) {
|
||||||
dst[0] = 0xff;
|
dst[2] = 0xff;
|
||||||
dst[1] = 0xff;
|
dst[1] = 0xff;
|
||||||
|
dst[0] = 0xff;
|
||||||
|
}
|
||||||
|
if ((count == 2) && dst[2] & 0x80) {
|
||||||
|
dst[1] = 0xff;
|
||||||
|
dst[0] = 0xff;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue