#define byte_to_byte(X) (X)
 
-#define UNPACK_ARRAY(TABLE, BLOB, LEN, TYPE, NTOHX) \
+#define UNPACK_ARRAY(TABLE, BLOB, LEN, TTYPE, BTYPE, NTOHX)    \
        do { \
                typeof(LEN) __i; \
-               TYPE *__t = (TYPE *) TABLE; \
-               TYPE *__b = (TYPE *) BLOB; \
+               TTYPE *__t = (TTYPE *) TABLE; \
+               BTYPE *__b = (BTYPE *) BLOB; \
                for (__i = 0; __i < LEN; __i++) { \
                        __t[__i] = NTOHX(__b[__i]); \
                } \
 
        /* loaded td_id's start at 1, subtract 1 now to avoid doing
         * it every time we use td_id as an index
         */
-       th.td_id = be16_to_cpu(*(u16 *) (blob)) - 1;
+       th.td_id = be16_to_cpu(*(__be16 *) (blob)) - 1;
        if (th.td_id > YYTD_ID_MAX)
                goto out;
-       th.td_flags = be16_to_cpu(*(u16 *) (blob + 2));
-       th.td_lolen = be32_to_cpu(*(u32 *) (blob + 8));
+       th.td_flags = be16_to_cpu(*(__be16 *) (blob + 2));
+       th.td_lolen = be32_to_cpu(*(__be32 *) (blob + 8));
        blob += sizeof(struct table_header);
 
        if (!(th.td_flags == YYTD_DATA16 || th.td_flags == YYTD_DATA32 ||
                table->td_lolen = th.td_lolen;
                if (th.td_flags == YYTD_DATA8)
                        UNPACK_ARRAY(table->td_data, blob, th.td_lolen,
-                                    u8, byte_to_byte);
+                                    u8, u8, byte_to_byte);
                else if (th.td_flags == YYTD_DATA16)
                        UNPACK_ARRAY(table->td_data, blob, th.td_lolen,
-                                    u16, be16_to_cpu);
+                                    u16, __be16, be16_to_cpu);
                else if (th.td_flags == YYTD_DATA32)
                        UNPACK_ARRAY(table->td_data, blob, th.td_lolen,
-                                    u32, be32_to_cpu);
+                                    u32, __be32, be32_to_cpu);
                else
                        goto fail;
                /* if table was vmalloced make sure the page tables are synced
        if (size < sizeof(struct table_set_header))
                goto fail;
 
-       if (ntohl(*(u32 *) data) != YYTH_MAGIC)
+       if (ntohl(*(__be32 *) data) != YYTH_MAGIC)
                goto fail;
 
-       hsize = ntohl(*(u32 *) (data + 4));
+       hsize = ntohl(*(__be32 *) (data + 4));
        if (size < hsize)
                goto fail;
 
-       dfa->flags = ntohs(*(u16 *) (data + 12));
+       dfa->flags = ntohs(*(__be16 *) (data + 12));
        data += hsize;
        size -= hsize;