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:
Magnus Damm 2008-02-07 19:58:46 +09:00 committed by Paul Mundt
parent 1e6760c5c4
commit 4252c659a4
1 changed files with 12 additions and 2 deletions

View File

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