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" 16clear_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 281: sub r11, 4 29 brlt 2f 30 3110: st.w r12++, r8 32 sub r11, 4 33 brge 10b 34 352: sub r11, -4 36 reteq 0 37 38 /* Unaligned count or address */ 39 bld r11, 1 40 brcc 12f 4111: st.h r12++, r8 42 sub r11, 2 43 reteq 0 4412: st.b r12++, r8 45 retal 0 46 47 /* Unaligned address */ 485: cp.w r11, 4 49 brlt 2b 50 51 lsl r9, 2 52 add pc, pc, r9 5313: st.b r12++, r8 54 sub r11, 1 5514: st.b r12++, r8 56 sub r11, 1 5715: 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 6618: sub r11, -4 6719: 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 77