[parisc-linux-cvs] linux grundler
Grant Grundler
grundler@parisc-linux.org
Sun, 29 Jun 2003 23:17:55 -0600
On Sun, Jun 29, 2003 at 10:54:56PM -0600, Grant Grundler wrote:
> Log message:
> 2.4.21-pa1 enable arch 64bit swap and fix it.
> First whack at intermezzo - misaligned data access problems.
>
> boots on a500. not tested on anything else.
Also:
o removed the user space "protection" in byteorder.h
o re-ordered declarations so it's obvious: 16/32/64 swap macros.
intermezzo FS needs the unsigned long alignment fixed in order
for cc1 to emit valid asm instructions. "ldd 52(%foo)" doesn't work.
grant
Index: Makefile
===================================================================
RCS file: /var/cvs/linux/Makefile,v
retrieving revision 1.398
diff -u -p -r1.398 Makefile
--- Makefile 26 Jun 2003 15:06:33 -0000 1.398
+++ Makefile 30 Jun 2003 04:49:25 -0000
@@ -1,7 +1,7 @@
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 21
-EXTRAVERSION = -pa0
+EXTRAVERSION = -pa1
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
Index: include/asm-parisc/byteorder.h
===================================================================
RCS file: /var/cvs/linux/include/asm-parisc/byteorder.h,v
retrieving revision 1.4
diff -u -p -r1.4 byteorder.h
--- include/asm-parisc/byteorder.h 7 Apr 2000 04:02:14 -0000 1.4
+++ include/asm-parisc/byteorder.h 30 Jun 2003 04:49:41 -0000
@@ -5,6 +5,15 @@
#ifdef __GNUC__
+static __inline__ __const__ __u16 ___arch__swab16(__u16 x)
+{
+ __asm__("dep %0, 15, 8, %0\n\t" /* deposit 00ab -> 0bab */
+ "shd %r0, %0, 8, %0" /* shift 000000ab -> 00ba */
+ : "=r" (x)
+ : "0" (x));
+ return x;
+}
+
static __inline__ __const__ __u32 ___arch__swab32(__u32 x)
{
unsigned int temp;
@@ -30,9 +39,9 @@ static __inline__ __const__ __u32 ___arc
*/
static __inline__ __const__ __u64 ___arch__swab64(__u64 x) {
__u64 temp;
- __asm__("permh 3210, %0, %0\n\t"
+ __asm__("permh,3210 %0, %0\n\t"
"hshl %0, 8, %1\n\t"
- "hshr u, %0, 8, %0\n\t"
+ "hshr,u %0, 8, %0\n\t"
"or %1, %0, %0"
: "=r" (x), "=&r" (temp)
: "0" (x));
@@ -50,23 +59,10 @@ static __inline__ __const__ __u64 ___arc
}
#endif
-
-static __inline__ __const__ __u16 ___arch__swab16(__u16 x)
-{
- __asm__("dep %0, 15, 8, %0\n\t" /* deposit 00ab -> 0bab */
- "shd %r0, %0, 8, %0" /* shift 000000ab -> 00ba */
- : "=r" (x)
- : "0" (x));
- return x;
-}
-
-#define __arch__swab32(x) ___arch__swab32(x)
#define __arch__swab16(x) ___arch__swab16(x)
-
-#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
-# define __BYTEORDER_HAS_U64__
-# define __SWAB_64_THRU_32__
-#endif
+#define __arch__swab32(x) ___arch__swab32(x)
+#define __arch__swab64(x) ___arch__swab64(x)
+#define __BYTEORDER_HAS_U64__
#endif /* __GNUC__ */
Index: include/linux/intermezzo_lib.h
===================================================================
RCS file: /var/cvs/linux/include/linux/intermezzo_lib.h,v
retrieving revision 1.2
diff -u -p -r1.2 intermezzo_lib.h
--- include/linux/intermezzo_lib.h 13 Nov 2002 15:17:01 -0000 1.2
+++ include/linux/intermezzo_lib.h 30 Jun 2003 04:49:41 -0000
@@ -27,6 +27,7 @@
#ifdef __KERNEL__
# include <linux/types.h>
+# include <asm/byteorder.h>
#else
# include <string.h>
# include <sys/types.h>