linux/arch/avr32/lib/clear_user.S
<<
>>
Prefs
   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