]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blob - arch/avr32/lib/clear_user.S
Merge branch 'for-4.9/dax' into libnvdimm-for-next
[mirror_ubuntu-zesty-kernel.git] / arch / avr32 / lib / clear_user.S
1 /*
2 * Copyright 2004-2006 Atmel Corporation
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8 #include <asm/page.h>
9 #include <asm/thread_info.h>
10 #include <asm/asm.h>
11
12 .text
13 .align 1
14 .global clear_user
15 .type clear_user, "function"
16 clear_user:
17 branch_if_kernel r8, __clear_user
18 ret_if_privileged r8, r12, r11, r11
19
20 .global __clear_user
21 .type __clear_user, "function"
22 __clear_user:
23 mov r9, r12
24 mov r8, 0
25 andl r9, 3, COH
26 brne 5f
27
28 1: sub r11, 4
29 brlt 2f
30
31 10: st.w r12++, r8
32 sub r11, 4
33 brge 10b
34
35 2: sub r11, -4
36 reteq 0
37
38 /* Unaligned count or address */
39 bld r11, 1
40 brcc 12f
41 11: st.h r12++, r8
42 sub r11, 2
43 reteq 0
44 12: st.b r12++, r8
45 retal 0
46
47 /* Unaligned address */
48 5: cp.w r11, 4
49 brlt 2b
50
51 lsl r9, 2
52 add pc, pc, r9
53 13: st.b r12++, r8
54 sub r11, 1
55 14: st.b r12++, r8
56 sub r11, 1
57 15: st.b r12++, r8
58 sub r11, 1
59 rjmp 1b
60
61 .size clear_user, . - clear_user
62 .size __clear_user, . - __clear_user
63
64 .section .fixup, "ax"
65 .align 1
66 18: sub r11, -4
67 19: retal r11
68
69 .section __ex_table, "a"
70 .align 2
71 .long 10b, 18b
72 .long 11b, 19b
73 .long 12b, 19b
74 .long 13b, 19b
75 .long 14b, 19b
76 .long 15b, 19b