Magic byteorder fix from Marcus
diff --git a/m4/byteorder.m4 b/m4/byteorder.m4
index 1f7563d..18c403a 100644
--- a/m4/byteorder.m4
+++ b/m4/byteorder.m4
@@ -32,12 +32,10 @@
 dnl Create a header file that defines extended byte swapping macros
 AC_DEFUN([AC_NEED_BYTEORDER_H],
 [
-changequote(, )dnl
-ac_dir=`echo $1|sed 's%/[^/][^/]*$%%'`
-changequote([, ])dnl
+ac_dir=`AS_DIRNAME(["$1"])`
 if test "$ac_dir" != "$1" && test "$ac_dir" != .; then
   # The file is in a subdirectory.
-  test ! -d "$ac_dir" && mkdir "$ac_dir"
+  test ! -d "$ac_dir" && AS_MKDIR_P(["$ac_dir"])
 fi
 
 # We're only interested in the target CPU, but it's not always set
@@ -236,6 +234,7 @@
 #define htole32(x)      swap32(x)
 #define le16toh(x)      swap16(x)
 #define le32toh(x)      swap32(x)
+#define le64toh(x)      swap64(x)
 
 #define htobe64(x)      (x)
 #define be64toh(x)      (x)
@@ -244,6 +243,7 @@
 #define HTOLE32(x)      (x) = htole32(x)
 #define LE16TOH(x)      (x) = le16toh(x)
 #define LE32TOH(x)      (x) = le32toh(x)
+#define LE64TOH(x)      (x) = le64toh(x)
 
 #define HTOBE64(x)      (void) (x)
 #define BE64TOH(x)      (void) (x)
@@ -322,12 +322,14 @@
 /* Non-optimized but portable macros */
 #define be16atoh(x)     ((uint16_t)(((x)[0]<<8)|(x)[1]))
 #define be32atoh(x)     ((uint32_t)(((x)[0]<<24)|((x)[1]<<16)|((x)[2]<<8)|(x)[3]))
-#define be64atoh(x)     ((uint64_t)(((x)[0]<<56)|((x)[1]<<48)|((x)[2]<<40)| \\
-        ((x)[3]<<32)|((x)[4]<<24)|((x)[5]<<16)|((x)[6]<<8)|(x)[7]))
+#define be64atoh_x(x,off,shift) 	(((uint64_t)((x)[off]))<<shift)
+#define be64atoh(x)     ((uint64_t)(be64atoh_x(x,0,56)|be64atoh_x(x,1,48)|be64atoh_x(x,2,40)| \\
+        be64atoh_x(x,3,32)|be64atoh_x(x,4,24)|be64atoh_x(x,5,16)|be64atoh_x(x,6,8)|((x)[7])))
 #define le16atoh(x)     ((uint16_t)(((x)[1]<<8)|(x)[0]))
 #define le32atoh(x)     ((uint32_t)(((x)[3]<<24)|((x)[2]<<16)|((x)[1]<<8)|(x)[0]))
-#define le64atoh(x)     ((uint64_t)(((x)[7]<<56)|((x)[6]<<48)|((x)[5]<<40)| \\
-        ((x)[4]<<32)|((x)[3]<<24)|((x)[2]<<16)|((x)[1]<<8)|(x)[0]))
+#define le64atoh_x(x,off,shift) (((uint64_t)(x)[off])<<shift)
+#define le64atoh(x)     ((uint64_t)(le64atoh_x(x,7,56)|le64atoh_x(x,6,48)|le64atoh_x(x,5,40)| \\
+        le64atoh_x(x,4,32)|le64atoh_x(x,3,24)|le64atoh_x(x,2,16)|le64atoh_x(x,1,8)|((x)[0])))
 
 #define htobe16a(a,x)   (a)[0]=(uint8_t)((x)>>8), (a)[1]=(uint8_t)(x)
 #define htobe32a(a,x)   (a)[0]=(uint8_t)((x)>>24), (a)[1]=(uint8_t)((x)>>16), \\