/drivers/include/asm/asm.h |
---|
63,6 → 63,31 |
_ASM_ALIGN ; \ |
_ASM_PTR (entry); \ |
.popsection |
.macro ALIGN_DESTINATION |
/* check for bad alignment of destination */ |
movl %edi,%ecx |
andl $7,%ecx |
jz 102f /* already aligned */ |
subl $8,%ecx |
negl %ecx |
subl %ecx,%edx |
100: movb (%rsi),%al |
101: movb %al,(%rdi) |
incq %rsi |
incq %rdi |
decl %ecx |
jnz 100b |
102: |
.section .fixup,"ax" |
103: addl %ecx,%edx /* ecx is zerorest also */ |
jmp copy_user_handle_tail |
.previous |
_ASM_EXTABLE(100b,103b) |
_ASM_EXTABLE(101b,103b) |
.endm |
#else |
# define _ASM_EXTABLE(from,to) \ |
" .pushsection \"__ex_table\",\"a\"\n" \ |