diff options
author | Lennert Buytenhek <buytenh@wantstofly.org> | 2005-11-07 16:12:08 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2005-11-07 16:12:08 -0500 |
commit | bedf142b8bba4331ed93161292a4ce4f8cde7308 (patch) | |
tree | cde053618935762e37badb509d191ac006ae197a /arch/arm/nwfpe/fpa11_cpdt.c | |
parent | 06c03cac9487555478c7d80065ebf7818bf6fd06 (diff) |
[ARM] 3118/1: fix and reenable nwfpe extended precision emulation for big-endian
Patch from Lennert Buytenhek
nwfpe extended precision emulation used to be broken on big-endian
and was therefore disabled. This patch fixes nwfpe so that it copies
extended precision floats to/from userspace in the proper word order
(similar to patch #2046, see the description of that patch for an
explanation) and reenables the Kconfig option.
Signed-off-by: Lennert Buytenhek <buytenh@wantstofly.org>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/nwfpe/fpa11_cpdt.c')
-rw-r--r-- | arch/arm/nwfpe/fpa11_cpdt.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/arm/nwfpe/fpa11_cpdt.c b/arch/arm/nwfpe/fpa11_cpdt.c index b0db5cbcc3b1..32859fa8dcfc 100644 --- a/arch/arm/nwfpe/fpa11_cpdt.c +++ b/arch/arm/nwfpe/fpa11_cpdt.c | |||
@@ -59,8 +59,13 @@ static inline void loadExtended(const unsigned int Fn, const unsigned int __user | |||
59 | p = (unsigned int *) &fpa11->fpreg[Fn].fExtended; | 59 | p = (unsigned int *) &fpa11->fpreg[Fn].fExtended; |
60 | fpa11->fType[Fn] = typeExtended; | 60 | fpa11->fType[Fn] = typeExtended; |
61 | get_user(p[0], &pMem[0]); /* sign & exponent */ | 61 | get_user(p[0], &pMem[0]); /* sign & exponent */ |
62 | #ifdef __ARMEB__ | ||
63 | get_user(p[1], &pMem[1]); /* ms bits */ | ||
64 | get_user(p[2], &pMem[2]); /* ls bits */ | ||
65 | #else | ||
62 | get_user(p[1], &pMem[2]); /* ls bits */ | 66 | get_user(p[1], &pMem[2]); /* ls bits */ |
63 | get_user(p[2], &pMem[1]); /* ms bits */ | 67 | get_user(p[2], &pMem[1]); /* ms bits */ |
68 | #endif | ||
64 | } | 69 | } |
65 | #endif | 70 | #endif |
66 | 71 | ||
@@ -177,8 +182,13 @@ static inline void storeExtended(const unsigned int Fn, unsigned int __user *pMe | |||
177 | } | 182 | } |
178 | 183 | ||
179 | put_user(val.i[0], &pMem[0]); /* sign & exp */ | 184 | put_user(val.i[0], &pMem[0]); /* sign & exp */ |
185 | #ifdef __ARMEB__ | ||
186 | put_user(val.i[1], &pMem[1]); /* msw */ | ||
187 | put_user(val.i[2], &pMem[2]); | ||
188 | #else | ||
180 | put_user(val.i[1], &pMem[2]); | 189 | put_user(val.i[1], &pMem[2]); |
181 | put_user(val.i[2], &pMem[1]); /* msw */ | 190 | put_user(val.i[2], &pMem[1]); /* msw */ |
191 | #endif | ||
182 | } | 192 | } |
183 | #endif | 193 | #endif |
184 | 194 | ||