\
        switch (sizeof(*(ptr))) {                                       \
        case 1:                                                         \
-               __get_user_asm(__gu_err, __gu_val, ptr, "ub", "=r");    \
+               __get_user_asm(__gu_err, *(u8*)&__gu_val, ptr, "ub", "=r"); \
                break;                                                  \
        case 2:                                                         \
-               __get_user_asm(__gu_err, __gu_val, ptr, "uh", "=r");    \
+               __get_user_asm(__gu_err, *(u16*)&__gu_val, ptr, "uh", "=r"); \
                break;                                                  \
        case 4:                                                         \
-               __get_user_asm(__gu_err, __gu_val, ptr, "", "=r");      \
+               __get_user_asm(__gu_err, *(u32*)&__gu_val, ptr, "", "=r"); \
                break;                                                  \
        case 8:                                                         \
-               __get_user_asm(__gu_err, __gu_val, ptr, "d", "=e");     \
+               __get_user_asm(__gu_err, *(u64*)&__gu_val, ptr, "d", "=e"); \
                break;                                                  \
        default:                                                        \
                __gu_err = __get_user_bad();                            \